#include <stdio.h>

struct Info { // struktura elementu faktury
  char typ[3];
  float wartosc;
};
typedef struct Info info; // typ danych item
#define ITEMS_NR 10 // rozmiar tablicy elementow
#define STACK_SIZE 10 // rozmiar stosu
info s[STACK_SIZE]; // tablica elementow dla stosu
static int head; // wskaznik stosu
void push(info ); // wlozenie elementu na stos
info pop(); // sciagniecie elementu ze stosu
void print(info item); // wydruk

int main() 
{
  int i;
  info item; // element 
  info items_tab[ITEMS_NR] = // tablica danych dla faktur 
    {
      {"FVZ", 123.456},
      {"FVZ", 321.654},
      {"FVZ", 654.123},
      {"FV ", 987.456},
      {"FV ", 789.098},
      {"FVZ", 123.321},
      {"FVZ", 234.432},
      {"FV ", 345.543},
      {"FV ", 567.765},
      {"FVZ", 1.0}
    };
  for (i = 0; i < ITEMS_NR; i++) { // odlozenie elementow na stos
    push(items_tab[i]);
    print(items_tab[i]);
  }
    printf("\n");
  for (i = 0; i <= ITEMS_NR; i++) { // zdjecie elementow ze stosu
    item = pop();
    print(item);
  }
  return 0;
}

void push(info item) 
{
  if (head == STACK_SIZE) {
    fprintf(stderr,"error: stack overflow!\n");
    exit(-1);
  }
  else
    s[head++] = item;
};

info pop() 
{
  if (head == 0) {
    fprintf(stderr,"error: stack underflow!\n");
    exit(-1);
  }
  else
    return s[--head];
};

void print(info item) // wydruk
{
  printf("%.3s\t%f\n", item.typ, item.wartosc);
}
